home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / lib / python2.5 / getpass.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-29  |  3KB  |  135 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.5)
  3.  
  4. '''Utilities to get a password and/or the current user name.
  5.  
  6. getpass(prompt) - prompt for a password, with echo turned off
  7. getuser() - get the user name from the environment or password database
  8.  
  9. On Windows, the msvcrt module will be used.
  10. On the Mac EasyDialogs.AskPassword is used, if available.
  11.  
  12. '''
  13. import sys
  14. __all__ = [
  15.     'getpass',
  16.     'getuser']
  17.  
  18. def unix_getpass(prompt = 'Password: ', stream = None):
  19.     '''Prompt for a password, with echo turned off.
  20.     The prompt is written on stream, by default stdout.
  21.  
  22.     Restore terminal settings at end.
  23.     '''
  24.     if stream is None:
  25.         stream = sys.stdout
  26.     
  27.     
  28.     try:
  29.         fd = sys.stdin.fileno()
  30.     except:
  31.         return default_getpass(prompt)
  32.  
  33.     old = termios.tcgetattr(fd)
  34.     new = old[:]
  35.     new[3] = new[3] & ~(termios.ECHO)
  36.     
  37.     try:
  38.         termios.tcsetattr(fd, termios.TCSADRAIN, new)
  39.         passwd = _raw_input(prompt, stream)
  40.     finally:
  41.         termios.tcsetattr(fd, termios.TCSADRAIN, old)
  42.  
  43.     stream.write('\n')
  44.     return passwd
  45.  
  46.  
  47. def win_getpass(prompt = 'Password: ', stream = None):
  48.     '''Prompt for password with echo off, using Windows getch().'''
  49.     if sys.stdin is not sys.__stdin__:
  50.         return default_getpass(prompt, stream)
  51.     
  52.     import msvcrt as msvcrt
  53.     for c in prompt:
  54.         msvcrt.putch(c)
  55.     
  56.     pw = ''
  57.     while None:
  58.         c = msvcrt.getch()
  59.         if c == '\r' or c == '\n':
  60.             break
  61.         
  62.         if c == '\x03':
  63.             raise KeyboardInterrupt
  64.         
  65.         if c == '\x08':
  66.             pw = pw[:-1]
  67.             continue
  68.         pw = pw + c
  69.         continue
  70.         msvcrt.putch('\r')
  71.         msvcrt.putch('\n')
  72.         return pw
  73.  
  74.  
  75. def default_getpass(prompt = 'Password: ', stream = None):
  76.     print >>sys.stderr, 'Warning: Problem with getpass. Passwords may be echoed.'
  77.     return _raw_input(prompt, stream)
  78.  
  79.  
  80. def _raw_input(prompt = '', stream = None):
  81.     if stream is None:
  82.         stream = sys.stdout
  83.     
  84.     prompt = str(prompt)
  85.     if prompt:
  86.         stream.write(prompt)
  87.     
  88.     line = sys.stdin.readline()
  89.     if not line:
  90.         raise EOFError
  91.     
  92.     if line[-1] == '\n':
  93.         line = line[:-1]
  94.     
  95.     return line
  96.  
  97.  
  98. def getuser():
  99.     '''Get the username from the environment or password database.
  100.  
  101.     First try various environment variables, then the password
  102.     database.  This works on Windows as long as USERNAME is set.
  103.  
  104.     '''
  105.     import os as os
  106.     for name in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'):
  107.         user = os.environ.get(name)
  108.         if user:
  109.             return user
  110.             continue
  111.     
  112.     import pwd as pwd
  113.     return pwd.getpwuid(os.getuid())[0]
  114.  
  115.  
  116. try:
  117.     import termios
  118.     (termios.tcgetattr, termios.tcsetattr)
  119. except (ImportError, AttributeError):
  120.     
  121.     try:
  122.         import msvcrt
  123.     except ImportError:
  124.         
  125.         try:
  126.             from EasyDialogs import AskPassword
  127.         except ImportError:
  128.             getpass = default_getpass
  129.  
  130.         getpass = AskPassword
  131.  
  132.     getpass = win_getpass
  133.  
  134. getpass = unix_getpass
  135.